home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / nfsmount / RCS / nfsAttr.c,v < prev    next >
Text File  |  1991-09-10  |  18KB  |  663 lines

  1. head     1.10;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.10
  10. date     91.09.10.19.24.56;  author mottsmth;  state Exp;
  11. branches ;
  12. next     1.9;
  13.  
  14. 1.9
  15. date     91.06.01.15.54.01;  author mottsmth;  state Exp;
  16. branches ;
  17. next     1.8;
  18.  
  19. 1.8
  20. date     91.03.23.19.33.22;  author mottsmth;  state Exp;
  21. branches ;
  22. next     1.7;
  23.  
  24. 1.7
  25. date     90.01.25.17.20.19;  author brent;  state Exp;
  26. branches ;
  27. next     1.6;
  28.  
  29. 1.6
  30. date     89.10.10.13.14.57;  author brent;  state Exp;
  31. branches ;
  32. next     1.5;
  33.  
  34. 1.5
  35. date     89.09.20.17.13.22;  author douglis;  state Exp;
  36. branches ;
  37. next     1.4;
  38.  
  39. 1.4
  40. date     89.02.16.14.40.40;  author brent;  state Exp;
  41. branches ;
  42. next     1.3;
  43.  
  44. 1.3
  45. date     89.02.02.15.04.19;  author brent;  state Exp;
  46. branches ;
  47. next     1.2;
  48.  
  49. 1.2
  50. date     88.11.14.15.14.44;  author brent;  state Exp;
  51. branches ;
  52. next     1.1;
  53.  
  54. 1.1
  55. date     88.11.02.12.44.03;  author brent;  state Exp;
  56. branches ;
  57. next     ;
  58.  
  59.  
  60. desc
  61. @Attribute handling procedures
  62. @
  63.  
  64.  
  65. 1.10
  66. log
  67. @Cleanup memory leaks.
  68. @
  69. text
  70. @/*
  71.  * nfsAttr.c --
  72.  * 
  73.  *    Attribute handling for NFS access.
  74.  *
  75.  * Copyright 1988 Regents of the University of California
  76.  * Permission to use, copy, modify, and distribute this
  77.  * software and its documentation for any purpose and without
  78.  * fee is hereby granted, provided that the above copyright
  79.  * notice appear in all copies.  The University of California
  80.  * makes no representations about the suitability of this
  81.  * software for any purpose.  It is provided "as is" without
  82.  * express or implied warranty.
  83.  */
  84. #ifndef lint
  85. static char rcsid[] = "$Header: /sprite/src/cmds/nfsmount/RCS/nfsAttr.c,v 1.9 91/06/01 15:54:01 mottsmth Exp Locker: mottsmth $ SPRITE (Berkeley)";
  86. #endif not lint
  87.  
  88. #include "stdio.h"
  89.  
  90. #include "nfs.h"
  91. #include "sys/stat.h"
  92. #include "kernel/fslcl.h"
  93.  
  94. typedef struct SavedCookie {
  95.     int offset;
  96.     nfscookie cookie;
  97.     struct SavedCookie *next;
  98. } SavedCookie;
  99.  
  100. void NfsToSpriteAttr();
  101. void SpriteToNFsAttr();
  102.  
  103. /*
  104.  *----------------------------------------------------------------------
  105.  *
  106.  * NfsToSpriteDirectory --
  107.  *
  108.  *    Convert from an XDR list of directory entries to a Sprite directory.
  109.  *
  110.  * Results:
  111.  *    This fills in the buffer with a Sprite format directory.
  112.  *
  113.  * Side effects:
  114.  *    This saves the last nfscookie for use with the next READIR rpc.
  115.  *
  116.  *----------------------------------------------------------------------
  117.  */
  118. void
  119. NfsToSpriteDirectory(dirListPtr, offset, countPtr, buffer, fileIDPtr)
  120.     dirlist *dirListPtr;
  121.     int offset;
  122.     int *countPtr;
  123.     char *buffer;
  124.     Fs_FileID *fileIDPtr;
  125. {
  126.     register int count = 0;
  127.     register entry *entryPtr;
  128.     register Fslcl_DirEntry *spriteEntryPtr;
  129.     register int nameLength;
  130.     entry *tempEntryPtr;
  131.  
  132.     /* At one time we checked the dirListPtr->eof flag and bailed
  133.        out early if it was set.  Unfortunately, Sys V sets this
  134.        flag even when it returns some directory entries to indicate
  135.        that a subsequent request will fail.  So now we rely on 
  136.        the dirListPtr->entries ptr being NULL to indicate no entries.
  137.     */
  138.  
  139.     entryPtr = dirListPtr->entries;
  140.     spriteEntryPtr = (Fslcl_DirEntry *)buffer;
  141.     while (entryPtr != (entry *)NULL) {
  142.     nameLength = strlen(entryPtr->name);
  143.     spriteEntryPtr->fileNumber = entryPtr->fileid;
  144.     spriteEntryPtr->nameLength = nameLength;
  145.     strcpy(spriteEntryPtr->fileName, entryPtr->name);
  146.     /* The xdr routines do implicit mallocs which were never
  147.        getting freed so I added these two lines. Maybe it 
  148.        should be done with XDR_FREE ? */
  149.     free(entryPtr->name);
  150.     entryPtr->name = (filename)NULL;
  151.     if (entryPtr->nextentry != (entry *)NULL) {
  152.         spriteEntryPtr->recordLength = Fslcl_DirRecLength(nameLength);
  153.         count += spriteEntryPtr->recordLength;
  154.         spriteEntryPtr = (Fslcl_DirEntry *)((int)spriteEntryPtr +
  155.                         spriteEntryPtr->recordLength);
  156.     } else {
  157.         /* 
  158.          * Make the last entry go up to the end of the directory block.
  159.          * We save the last cookie to support sequential reading of the
  160.          * directory.  To be completely genernal we'd have to save the
  161.          * complete list of cookie/offset pairs.
  162.          */
  163.         register int extraRoom;
  164.         SavedCookie *savedCookie;
  165.  
  166.         extraRoom = FSLCL_DIR_BLOCK_SIZE - (count % FSLCL_DIR_BLOCK_SIZE);
  167.         spriteEntryPtr->recordLength = extraRoom;
  168.         count += extraRoom;
  169.         /*
  170.          * Push a saved cookie onto a list hanging from the major field.
  171.          */
  172.         savedCookie = (SavedCookie *)malloc(sizeof(SavedCookie));
  173.         savedCookie->offset = offset + count;
  174.         bcopy((char *)&entryPtr->cookie, (char *)&savedCookie->cookie,
  175.             sizeof(nfscookie));
  176.         savedCookie->next = (SavedCookie *)fileIDPtr->major;
  177.         fileIDPtr->major = (int)savedCookie;
  178.     }
  179.     /* Also, the implicitly acquired dirlist space wasn't going away,
  180.        so we'll zap it here. JMS */
  181.     tempEntryPtr = entryPtr;
  182.     entryPtr = entryPtr->nextentry;
  183.     free(tempEntryPtr);
  184.     }
  185.     *countPtr = count;
  186. }
  187.  
  188. /*
  189.  *----------------------------------------------------------------------
  190.  *
  191.  * NfsFindCookie --
  192.  *
  193.  *    Look through the list of savedCookie that are hung off the
  194.  *    fileID.major field of a directory to find one that corresponds
  195.  *    to the given offset.
  196.  *
  197.  * Results:
  198.  *    None.
  199.  *
  200.  * Side effects:
  201.  *    None.
  202.  *
  203.  *----------------------------------------------------------------------
  204.  */
  205. void
  206. NfsFindCookie(fileIDPtr, offset, cookiePtr)
  207.     Fs_FileID *fileIDPtr;
  208.     int offset;
  209.     nfscookie *cookiePtr;
  210. {
  211.     register SavedCookie *savedCookiePtr;
  212.     register SavedCookie *savedCookiePtrTrail = (SavedCookie *)NULL;
  213.     int badCookie = -1;
  214.  
  215.     savedCookiePtr = (SavedCookie *)fileIDPtr->major;
  216.     while (savedCookiePtr != (SavedCookie *)NULL) {
  217.     if (savedCookiePtr->offset == offset) {
  218.         bcopy((char *)&savedCookiePtr->cookie, (char *)cookiePtr,
  219.         sizeof(nfscookie));
  220.         /* Add code to release cookie so we don't lose heap space. JMS */
  221.         if (savedCookiePtrTrail == (SavedCookie *)NULL) {
  222.         fileIDPtr->major = (int)savedCookiePtr->next;
  223.         } else {
  224.         savedCookiePtrTrail->next = savedCookiePtr->next;
  225.         }
  226.         free((char *)savedCookiePtr);
  227.         return;
  228.     }
  229.     savedCookiePtrTrail = savedCookiePtr;
  230.     savedCookiePtr = savedCookiePtr->next;
  231.     }
  232.     printf("NfsFindCookie: no directory cookie for offset %d\n");
  233.     bcopy((char *)&badCookie, (char *)cookiePtr, sizeof(nfscookie));
  234. }
  235.  
  236. /*
  237.  *----------------------------------------------------------------------
  238.  *
  239.  * NfsGetAttrStream --
  240.  *
  241.  *    The default GetAttributes handling procedure called when an
  242.  *    PDEV_GET_ATTR request is received over a request stream.
  243.  *
  244.  * Results:
  245.  *    None.
  246.  *
  247.  * Side effects
  248.  *    None.
  249.  *
  250.  *----------------------------------------------------------------------
  251.  */
  252. /*ARGSUSED*/
  253. ReturnStatus
  254. NfsGetAttrStream(streamPtr, spriteAttrPtr, selectBitsPtr)
  255.     Pdev_Stream *streamPtr;
  256.     Fs_Attributes *spriteAttrPtr;
  257.     int *selectBitsPtr;
  258. {
  259.     register Fs_FileID *fileIDPtr = (Fs_FileID *)streamPtr->clientData;
  260.     register nfs_fh *handlePtr;
  261.     register int status;
  262.     NfsState *nfsPtr;
  263.     attrstat attrStat;
  264.  
  265.     if (fileIDPtr->minor >= 0 && fileIDPtr->minor < nfsFileTableSize) {
  266.     handlePtr = nfsFileTable[fileIDPtr->minor]->handlePtr;
  267.     nfsPtr = (NfsState *)fileIDPtr->serverID;
  268.     nfsPtr->nfsClnt->cl_auth = nfsFileTable[fileIDPtr->minor]->authPtr;
  269.  
  270.     if (clnt_call(nfsPtr->nfsClnt, NFSPROC_GETATTR, xdr_nfs_fh, handlePtr,
  271.             xdr_attrstat, &attrStat, nfsTimeout) != RPC_SUCCESS) {
  272.         clnt_perror(nfsPtr->nfsClnt, "NFSPROC_GETATTR");
  273.         status = FAILURE;
  274.     } else {
  275.         status = attrStat.status;
  276.         if (status == NFS_OK) {
  277.         NfsToSpriteAttr(&attrStat.attrstat_u.attributes, spriteAttrPtr);
  278.         } else {
  279.         status = NfsStatusMap(status);
  280.         }
  281.     }
  282.     } else {
  283.     printf("NfsGetAttrStream: bad fileID <%d,%d,%d,%d>\n", fileIDPtr->type,
  284.         fileIDPtr->serverID, fileIDPtr->major, fileIDPtr->minor);
  285.     status = FAILURE;
  286.     }
  287.     *selectBitsPtr = FS_READABLE | FS_WRITABLE;
  288.     return(status);
  289. }
  290. /*
  291.  *----------------------------------------------------------------------
  292.  *
  293.  * NfsToSpriteAttr --
  294.  *
  295.  *    Map from NFS to Sprite attributes.
  296.  *
  297.  * Results:
  298.  *    Fills in the Sprite attributes from the NFS ones.
  299.  *
  300.  * Side effects
  301.  *    None.
  302.  *
  303.  *----------------------------------------------------------------------
  304.  */
  305. void
  306. NfsToSpriteAttr(nfsAttrPtr, spriteAttrPtr)
  307.     register fattr *nfsAttrPtr;
  308.     register Fs_Attributes *spriteAttrPtr;
  309. {
  310.     spriteAttrPtr->serverID        = -1;
  311.     spriteAttrPtr->domain        = nfsAttrPtr->fsid;
  312.     spriteAttrPtr->fileNumber        = nfsAttrPtr->fileid;
  313.     spriteAttrPtr->type            = nfsToSpriteFileType[(int) nfsAttrPtr->type];
  314.     spriteAttrPtr->size            = nfsAttrPtr->size;
  315.     spriteAttrPtr->numLinks        = nfsAttrPtr->nlink;
  316.     spriteAttrPtr->permissions        = nfsAttrPtr->mode & 07777;
  317.     spriteAttrPtr->uid            = nfsAttrPtr->uid;
  318.     spriteAttrPtr->gid            = nfsAttrPtr->gid;
  319.     spriteAttrPtr->devServerID        = -1;
  320.     if (nfsAttrPtr->type == NFBLK || nfsAttrPtr->type == NFCHR) {
  321.     spriteAttrPtr->devType        = unix_major(nfsAttrPtr->rdev);
  322.     spriteAttrPtr->devUnit        = unix_minor(nfsAttrPtr->rdev);
  323.     } else {
  324.     spriteAttrPtr->devType        = -1;
  325.     spriteAttrPtr->devUnit        = -1;
  326.     }
  327.     spriteAttrPtr->createTime.seconds        = nfsAttrPtr->mtime.seconds;
  328.     spriteAttrPtr->createTime.microseconds    = nfsAttrPtr->mtime.useconds;
  329.     spriteAttrPtr->accessTime.seconds        = nfsAttrPtr->atime.seconds;
  330.     spriteAttrPtr->accessTime.microseconds    = nfsAttrPtr->atime.useconds;
  331.     spriteAttrPtr->descModifyTime.seconds    = nfsAttrPtr->ctime.seconds;
  332.     spriteAttrPtr->descModifyTime.microseconds    = nfsAttrPtr->ctime.useconds;
  333.     spriteAttrPtr->dataModifyTime.seconds    = nfsAttrPtr->mtime.seconds;
  334.     spriteAttrPtr->dataModifyTime.microseconds    = nfsAttrPtr->mtime.useconds;
  335.     /*
  336.      * Sprite "blocks" means 1K.  Unix "blocks" mean 512 bytes.
  337.      * In both cases, blocksize is the file system block size, which
  338.      * has nothing to do with the units of the blocksize field!
  339.      */
  340.     spriteAttrPtr->blocks        = nfsAttrPtr->blocks / 2;
  341.     spriteAttrPtr->blockSize        = nfsAttrPtr->blocksize;
  342.     spriteAttrPtr->version        = nfsAttrPtr->mtime.seconds;
  343.     spriteAttrPtr->userType        = 0;
  344. }
  345.  
  346. /*
  347.  *----------------------------------------------------------------------
  348.  *
  349.  * NfsSetAttrStream --
  350.  *
  351.  *    PDEV_SET_ATTR callback to set attributes of an open NFS file.
  352.  *
  353.  * Results:
  354.  *    None.
  355.  *
  356.  * Side effects
  357.  *    None.
  358.  *
  359.  *----------------------------------------------------------------------
  360.  */
  361. /*ARGSUSED*/
  362. ReturnStatus
  363. NfsSetAttrStream(streamPtr, flags, uid, gid, spriteAttrPtr, selectBitsPtr)
  364.     Pdev_Stream *streamPtr;
  365.     int flags;            /* What attributes to set */
  366.     int uid;            /* UserID of process doing the set attr */
  367.     int gid;            /* GroupID of process doing the set attr */
  368.     Fs_Attributes *spriteAttrPtr;
  369.     int *selectBitsPtr;
  370. {
  371.     register Fs_FileID *fileIDPtr = (Fs_FileID *)streamPtr->clientData;
  372.     register nfs_fh *handlePtr;
  373.     register int status;
  374.     NfsState *nfsPtr;
  375.     sattrargs sattrArgs;
  376.     attrstat attrStat;
  377.  
  378.     if (fileIDPtr->minor >= 0 && fileIDPtr->minor < nfsFileTableSize) {
  379.     handlePtr = nfsFileTable[fileIDPtr->minor]->handlePtr;
  380.     nfsPtr = (NfsState *)fileIDPtr->serverID;
  381.     nfsPtr->nfsClnt->cl_auth = nfsFileTable[fileIDPtr->minor]->authPtr;
  382.  
  383.     bcopy((char *)handlePtr, (char *)&sattrArgs.file, sizeof(nfs_fh));
  384.     SpriteToNfsAttr(flags, spriteAttrPtr, &sattrArgs.attributes);
  385.     if (clnt_call(nfsPtr->nfsClnt, NFSPROC_SETATTR, xdr_sattrargs,
  386.             &sattrArgs, xdr_attrstat, &attrStat, nfsTimeout)
  387.             != RPC_SUCCESS) {
  388.         clnt_perror(nfsPtr->nfsClnt, "NFSPROC_SETATTR");
  389.         status = FAILURE;
  390.     } else {
  391.         status = NfsStatusMap(((int)attrStat.status));
  392.     }
  393.     } else {
  394.     printf("NfsSetAttrStream: bad fileID <%d,%d,%d,%d>\n", fileIDPtr->type,
  395.         fileIDPtr->serverID, fileIDPtr->major, fileIDPtr->minor);
  396.     status = FAILURE;
  397.     }
  398.     *selectBitsPtr = FS_READABLE | FS_WRITABLE;
  399.     return(status);
  400. }
  401.  
  402. /*
  403.  *----------------------------------------------------------------------
  404.  *
  405.  * SpriteToNfsAttr --
  406.  *
  407.  *    Map from Sprite to NFS attributes.
  408.  *
  409.  * Results:
  410.  *    Fills in the NFS attributes from the Sprite ones.
  411.  *
  412.  * Side effects
  413.  *    None.
  414.  *
  415.  *----------------------------------------------------------------------
  416.  */
  417. void
  418. SpriteToNfsAttr(flags, spriteAttrPtr, nfsAttrPtr)
  419.     register int flags;            /* Indicate which attrs to set */
  420.     register Fs_Attributes *spriteAttrPtr;
  421.     register sattr *nfsAttrPtr;
  422. {
  423.     if (flags & FS_SET_MODE) {
  424.     nfsAttrPtr->mode = spriteAttrPtr->permissions & 07777;
  425.     } else {
  426.     nfsAttrPtr->mode = -1;
  427.     }
  428.     if (flags & FS_SET_OWNER) {
  429.     nfsAttrPtr->uid        = spriteAttrPtr->uid;
  430.     nfsAttrPtr->gid        = spriteAttrPtr->gid;
  431.     } else {
  432.     nfsAttrPtr->uid        = -1;
  433.     nfsAttrPtr->gid        = -1;
  434.     }
  435.     nfsAttrPtr->size        = -1;        /* Not used for truncate */
  436.     if (flags & FS_SET_TIMES) {
  437.     nfsAttrPtr->atime.seconds  = spriteAttrPtr->accessTime.seconds;
  438.     nfsAttrPtr->atime.useconds = spriteAttrPtr->accessTime.microseconds;
  439.     nfsAttrPtr->mtime.seconds  = spriteAttrPtr->dataModifyTime.seconds;
  440.     nfsAttrPtr->mtime.useconds = spriteAttrPtr->dataModifyTime.microseconds;
  441.     } else {
  442.     nfsAttrPtr->atime.seconds  = -1;
  443.     nfsAttrPtr->atime.useconds = -1;
  444.     nfsAttrPtr->mtime.seconds  = -1;
  445.     nfsAttrPtr->mtime.useconds = -1;
  446.     }
  447. }
  448.  
  449. /*
  450.  *----------------------------------------------------------------------
  451.  *
  452.  * NfsCacheAttributes --
  453.  *
  454.  *    Cache NFS attributes.
  455.  *
  456.  * Results:
  457.  *    None.
  458.  *
  459.  * Side effects
  460.  *    Tucks away the attributes with a coarse date stamp.
  461.  *
  462.  *----------------------------------------------------------------------
  463.  */
  464. void
  465. NfsCacheAttributes(fileIDPtr, nfsAttrPtr)
  466.     register Fs_FileID *fileIDPtr;
  467.     register fattr *nfsAttrPtr;
  468. {
  469.     return;
  470. }
  471.  
  472. @
  473.  
  474.  
  475. 1.9
  476. log
  477. @Fixed memory leak due to NfsToSpriteDirectory routine
  478. not freeing space allocated by xdr routines.
  479. @
  480. text
  481. @d16 1
  482. a16 1
  483. static char rcsid[] = "$Header: /sprite/src/cmds/nfsmount/RCS/nfsAttr.c,v 1.8 91/03/23 19:33:22 mottsmth Exp Locker: mottsmth $ SPRITE (Berkeley)";
  484. d111 1
  485. a111 3
  486.        so we'll zap it here.  BTW, the SavedCookie space 
  487.        (malloc'd above) isn't being freed either,
  488.        but I'm not sure when it's safe to do this. JMS     */
  489. d143 1
  490. d151 7
  491. d160 1
  492. @
  493.  
  494.  
  495. 1.8
  496. log
  497. @Handle eof condition on directory read from Sys V 
  498. @
  499. text
  500. @d16 1
  501. a16 1
  502. static char rcsid[] = "$Header: /sprite/src/cmds/nfsmount/RCS/nfsAttr.c,v 1.7 90/01/25 17:20:19 brent Exp Locker: mottsmth $ SPRITE (Berkeley)";
  503. d61 1
  504. d77 5
  505. d110 5
  506. d116 1
  507. @
  508.  
  509.  
  510. 1.7
  511. log
  512. @Fixed use of 'major' and 'minor' macros
  513. @
  514. text
  515. @d16 1
  516. a16 1
  517. static char rcsid[] = "$Header: /sprite/src/cmds/nfsmount/RCS/nfsAttr.c,v 1.6 89/10/10 13:14:57 brent Exp Locker: brent $ SPRITE (Berkeley)";
  518. d62 7
  519. a68 5
  520.     if (dirListPtr->eof) {
  521.     *countPtr = 0;
  522.     fileIDPtr->major = 0;
  523.     return;
  524.     }
  525. @
  526.  
  527.  
  528. 1.6
  529. log
  530. @Updated to new FS typedefs.
  531. Also fixed the block count as returned by the 'df' program.
  532. @
  533. text
  534. @d16 1
  535. a16 1
  536. static char rcsid[] = "$Header: /a/newcmds/nfsmount/RCS/nfsAttr.c,v 1.5 89/09/20 17:13:22 douglis Exp Locker: brent $ SPRITE (Berkeley)";
  537. d231 2
  538. a232 2
  539.     spriteAttrPtr->devType        = major(nfsAttrPtr->rdev);
  540.     spriteAttrPtr->devUnit        = minor(nfsAttrPtr->rdev);
  541. @
  542.  
  543.  
  544. 1.5
  545. log
  546. @Removed lint
  547. @
  548. text
  549. @d16 1
  550. a16 1
  551. static char rcsid[] = "$Header: /a/newcmds/nfsmount/RCS/nfsAttr.c,v 1.4 89/02/16 14:40:40 brent Exp Locker: douglis $ SPRITE (Berkeley)";
  552. d23 1
  553. a23 1
  554. #include "kernel/fsDisk.h"
  555. d59 1
  556. a59 1
  557.     register FsDirEntry *spriteEntryPtr;
  558. d68 1
  559. a68 1
  560.     spriteEntryPtr = (FsDirEntry *)buffer;
  561. d75 1
  562. a75 1
  563.         spriteEntryPtr->recordLength = FsDirRecLength(nameLength);
  564. d77 1
  565. a77 1
  566.         spriteEntryPtr = (FsDirEntry *)((int)spriteEntryPtr +
  567. d89 1
  568. a89 1
  569.         extraRoom = FS_DIR_BLOCK_SIZE - (count % FS_DIR_BLOCK_SIZE);
  570. d245 6
  571. a250 1
  572.     spriteAttrPtr->blocks        = nfsAttrPtr->blocks;
  573. @
  574.  
  575.  
  576. 1.4
  577. log
  578. @Fixed FS_SET_MODE to ignore the 'type' field in the Sprite
  579. attributes structure instead of trying to map it to IF_REG
  580. or whatever.  The 'type' field is not defined during FS_SET_MODE.
  581. @
  582. text
  583. @d16 1
  584. a16 1
  585. static char rcsid[] = "$Header: /a/newcmds/nfsmount/RCS/nfsAttr.c,v 1.3 89/02/02 15:04:19 brent Exp $ SPRITE (Berkeley)";
  586. d223 1
  587. a223 1
  588.     spriteAttrPtr->type            = nfsToSpriteFileType[nfsAttrPtr->type];
  589. d296 1
  590. a296 1
  591.         status = NfsStatusMap(attrStat.status);
  592. @
  593.  
  594.  
  595. 1.3
  596. log
  597. @Updated to new pfs package.
  598. @
  599. text
  600. @d16 1
  601. a16 1
  602. static char rcsid[] = "$Header: /a/newcmds/nfssrv/RCS/nfsAttr.c,v 1.2 88/11/14 15:14:44 brent Exp $ SPRITE (Berkeley)";
  603. a329 5
  604.     if (spriteAttrPtr->type >= 0 && spriteAttrPtr->type <= FS_XTRA_FILE) {
  605.         nfsAttrPtr->mode |= spriteToNfsModeType[spriteAttrPtr->type];
  606.     } else {
  607.         printf("SpriteToNfsAttr bad file type %d\n", spriteAttrPtr->type);
  608.     }
  609. @
  610.  
  611.  
  612. 1.2
  613. log
  614. @Added user authentication
  615. @
  616. text
  617. @d16 1
  618. a16 1
  619. static char rcsid[] = "$Header: /sprite/users/brent/nfstest/RCS/nfsAttr.c,v 1.1 88/11/02 12:44:03 brent Exp $ SPRITE (Berkeley)";
  620. d104 1
  621. d164 2
  622. a165 2
  623. NfsGetAttrStream(private, spriteAttrPtr, selectBitsPtr)
  624.     ClientData private;
  625. d169 1
  626. a169 1
  627.     register Fs_FileID *fileIDPtr = (Fs_FileID *)private;
  628. d268 2
  629. a269 2
  630. NfsSetAttrStream(private, flags, uid, gid, spriteAttrPtr, selectBitsPtr)
  631.     ClientData private;
  632. d276 1
  633. a276 1
  634.     register Fs_FileID *fileIDPtr = (Fs_FileID *)private;
  635. @
  636.  
  637.  
  638. 1.1
  639. log
  640. @Initial revision
  641. @
  642. text
  643. @d16 1
  644. a16 1
  645. static char rcsid[] = "$Header: fsPfs.c,v 6.0 88/10/11 15:52:49 brent Exp $ SPRITE (Berkeley)";
  646. d169 1
  647. a169 1
  648.     register nfs_fh *handlePtr = nfsHandleTable[fileIDPtr->minor];
  649. d174 2
  650. a175 2
  651.     if (fileIDPtr->minor >= 0 && fileIDPtr->minor < nfsHandleTableSize) {
  652.     handlePtr = nfsHandleTable[fileIDPtr->minor];
  653. d177 1
  654. d276 1
  655. a276 1
  656.     register nfs_fh *handlePtr = nfsHandleTable[fileIDPtr->minor];
  657. d282 2
  658. a283 2
  659.     if (fileIDPtr->minor >= 0 && fileIDPtr->minor < nfsHandleTableSize) {
  660.     handlePtr = nfsHandleTable[fileIDPtr->minor];
  661. d285 1
  662. @
  663.